package com.feicheng.controller;

import com.alibaba.fastjson.JSONArray;
import com.feicheng.base.batch.ProcurementBatch;
import com.feicheng.base.common.DaoConstant;
import com.feicheng.base.exception.SystemException;
import com.feicheng.base.result.Result;
import com.feicheng.model.PurchaseHeaderWithPurchaseItem;
import com.feicheng.entity.PurchaseItem;
import com.feicheng.service.IPurchaseHeaderService;
import com.feicheng.service.IPurchaseItemService;

import com.mysql.cj.xdevapi.JsonArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 新增采购订单接口
 * @author 于阳
 */
@RestController
@RequestMapping("/purchase")
public class InsertPurchaseHeaderAndPurchaseItemController {

    /* 注入持久层采购订单头service */
    @Autowired
    IPurchaseHeaderService iPurchaseHeaderService;

    /* 注入持久层采购订单service */
    @Autowired
    IPurchaseItemService iPurchaseItemService;

    @PostMapping("/info")
    @Transactional
    public Result insertInfo (
            @RequestBody PurchaseHeaderWithPurchaseItem purchaseHeaderWithPurchaseItem){

        // 非空判断，采购头字段是否为空
        if (null == purchaseHeaderWithPurchaseItem.getUserId()) {

            //todo
            throw new SystemException("用户编号不能为空");
        }
        if (null == purchaseHeaderWithPurchaseItem.getStoreId()) {

            //todo
            throw new SystemException("门店编号不能为空");
        }

        JSONArray jsonArray =
                JSONArray.parseArray(purchaseHeaderWithPurchaseItem.getPurchaseItem());
        List<PurchaseItem> PurchaseItems =
                jsonArray.toJavaList(PurchaseItem.class);
        System.out.println("+++++++++++++++++++++++++++"+PurchaseItems);
        // for-each 循环判断入库体内容是否为空
        for (PurchaseItem purchaseItem : PurchaseItems) {
            if (null == purchaseItem.getType()){

                //todo
                throw new SystemException("产品类别不能为空");
            }
            if (null == purchaseItem.getName()){

                //todo
                throw new SystemException("产品名称不能为空");
            }
            if (null == purchaseItem.getNum()){

                //todo
                throw new SystemException("采购数量不能为空");
            }
            if (null == purchaseItem.getPrice()){

                //todo
                throw new SystemException("采购价格不能为空");
            }
        }

        // 获取用户id
        Integer userId = purchaseHeaderWithPurchaseItem.getUserId();

        // 获取门店id
        Integer storeId = purchaseHeaderWithPurchaseItem.getStoreId();

        // 生成采购订单时间
        LocalDateTime localDateTime = LocalDateTime.now();
        purchaseHeaderWithPurchaseItem.setDate(localDateTime);

        // 装配订单批次号
        purchaseHeaderWithPurchaseItem.setBatchNo(ProcurementBatch.getBatch(userId,storeId));

        // 装配订单状态
        purchaseHeaderWithPurchaseItem.setState(DaoConstant.VALUE.STATE);

        // 当前数据加入数据库
        iPurchaseHeaderService.save(purchaseHeaderWithPurchaseItem);

        // 创建采购订单体list集合
        List<PurchaseItem> addPurchaseItemList = PurchaseItems;

        // 获取list集合，将订采购头单编号插入
        for (PurchaseItem purchaseItem : addPurchaseItemList) {
            purchaseItem.setPurchaseHeaderId(purchaseHeaderWithPurchaseItem.getPurchaseHeaderId());
        }

        // 保存信息
        boolean batch = iPurchaseItemService.saveBatch(addPurchaseItemList);
        return Result.success(batch);
    }
}













